Skip to content

ci: consolidate release pipeline into release-please.yml#29

Merged
us merged 1 commit into
us:mainfrom
jahirvidrio:fix/release-pipeline-automation
Jun 21, 2026
Merged

ci: consolidate release pipeline into release-please.yml#29
us merged 1 commit into
us:mainfrom
jahirvidrio:fix/release-pipeline-automation

Conversation

@jahirvidrio

Copy link
Copy Markdown
Contributor

Closes the release chain #18 left manual: #18 added workflow_dispatch to rebuild a tag by hand, but automatic releases still publish nothing. This moves build-release into release-please.yml, gated on release_created, so it runs in the same run as the release — no downstream-trigger needed. workflow_dispatch is preserved for backfill/recovery.

What changed

  • release-please.yml: added workflow_dispatch (tag input), per-job permissions, outputs: (release_created, tag_name), and a build-release job (needs: release-please, runs-on: macos-26) — build → tarball → SHA256 → asset upload → Homebrew tap update.
  • release.yml: deleted — body absorbed verbatim into build-release.

v0.4.1 backfill (one-time, after merge): run Actions → Release Please → Run workflow with tag: v0.4.1 once to publish the v0.4.1 binary + tap. Automatic from then on.

@us us left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you, @jahirvidrio — this is a genuinely nice piece of CI plumbing. 🙏 You closed exactly the gap #18 left open: automatic releases were publishing nothing, and folding build-release into release-please.yml (gated on release_created, same run, no downstream-trigger dance) is the clean fix. Deleting release.yml outright instead of leaving two half-wired workflows around is the right call.

I ran a multi-agent review across CI logic, security, and consolidation parity. Findings:

  • Trigger matrix — correct on all four paths. push+release → builds; push without a release → skipped; workflow_dispatch → builds while release-please stays skipped (the !cancelled() + needs semantics work because a skipped dependency still lets the if evaluate); release-please failure → no spurious build. The inputs.tag || needs.release-please.outputs.tag_name fallback resolves right on every path.
  • Security — actually improved. Moving from a top-level permissions block to per-job least-privilege (build-release gets only contents: write) is a real hardening. RELEASE_TAG is passed via env: and used quoted, so no expression-injection surface. Token handling is carried over verbatim from the old workflow — nothing newly risky.
  • Parity — preserved. Every build step (build → strip → tarball → sha256 → upload → Homebrew formula) is intact, and the new Verify release exists pre-flight guard is a thoughtful addition that fails fast on a bad backfill.
  • One small note (non-blocking): the old push: tags: v* trigger is gone. That's fine — and arguably correct, since GitHub suppresses runs from GITHUB_TOKEN-created tags anyway (which is why the old auto-build never fired). workflow_dispatch covers the manual/backfill case you documented. No change needed; just flagging it for the record.

Clean, well-scoped, well-described. Merging now — and thanks again for the careful write-up, including the v0.4.1 backfill note. 🚀

@us us merged commit 17c15bb into us:main Jun 21, 2026
1 check passed
@jahirvidrio jahirvidrio deleted the fix/release-pipeline-automation branch June 21, 2026 02:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants